package com.shujia.wyh.mrdemos;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/*
    map读取文本文件的时候，输入的key和value类型是内部定死的，key是LongWriterable,value是Text类型
 */
public class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
    //因为map逻辑是作用在文件中的每一行上，所以每一行都会执行一次这里的map方法
    //key相当于是每一行的开始位置，value相当于读取到一行数据
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws IOException, InterruptedException {
        //将hadoop的字符串类型转成java中的字符串类型
        //but on the edge of
        String line = value.toString();

        //将读取到的一行进行按照空格切分
        String[] strings = line.split(" ");

        //循环数组得到每一个单词
        //使用增强for循环进行遍历得到每个单词
        for (String word : strings) {
            // <but,1>
            // <on,1>
            // <the,1>
            // <edge,1>
            // <of,1>
            //context代表的是hadoop的上下文的意思，将来他可以将map中或者reduce的数据写入到下一阶段中
            context.write(new Text(word),new LongWritable(1L));
        }
    }
}
